import store from '@/store';
import paginate from '@/config/paginate.js';
import {
	cloneObj,
	inArray,
	isEmpty,
	urlEncode,
} from '@/utils/util.js'

/**
 * 显示成功提示框
 * @param {String} msg 提示文本  
 * @param {Function} callback 使用成功回调
 */
export const showSuccess = (msg, callback) => {
	uni.showToast({
		title: msg,
		icon: 'success',
		mask: true,
		duration: 1500,
		success() {
			callback && callback()
		}
	})
}

/**
 * 显示纯文字提示框
 * @param {String} msg 提示文本
 * @param {Number} duration 延迟时间    
 * @param {Boolean} mask 遮罩层 
 */
export const showToast = (msg, duration = 1500, mask = false) => {
	uni.showToast({
		title: msg, // 提示的内容
		icon: 'none',
		mask, // 是否显示透明蒙层，防止触摸穿透
		duration // 提示的延迟时间，单位毫秒，默认：1500
	})
}

/**
 * tabBar页面路径列表 (用于链接跳转时判断)
 * tabBarLinks为常量, 无需修改
 * @returns tabBarLinks = [...页面路径]
 */
export const getTabBarLinks = () => {
	const tabBarLinks = [
		'pages/index/index',
		'pages/user/index',
	]
	return tabBarLinks
}

/**
 * 跳转到指定页面url
 * 支持tabBar页面
 * @param {String}  url   页面路径
 * @param {Object}  query 页面参数
 * @param {String}  mode  跳转类型(默认navigateTo)
 */
export const navTo = (url, query = {}, mode = 'navigateTo') => {
	if (!url || url.length == 0) {
		return false
	}
	// tabBar页面, 使用switchTab
	if (inArray(url, getTabBarLinks())) {
		uni.switchTab({
			url: `/${url}`
		})
		return true
	}
	// 生成query参数
	const queryStr = !isEmpty(query) ? '?' + urlEncode(query) : ''
	// 普通页面, 使用navigateTo
	mode === 'navigateTo' && uni.navigateTo({
		url: `/${url}${queryStr}`
	})
	// 特殊指定, 使用redirectTo
	mode === 'redirectTo' && uni.redirectTo({
		url: `/${url}${queryStr}`
	})
	return true
}

/**
 * 获取更多列表数据
 * @return {Array} list
 */
export const getEmptyPaginateObj = () => {
	return cloneObj(paginate)
}

/**
 * 加载更多列表数据
 * @param {Object} resList 新列表
 * @param {Object} oldList 旧列表数据
 * @param {int} pageNo 当前页码
 */
export const getMoreListData = (resList, oldList, pageNo) => {
	// 如果是第一页需手动制空列表
	if (pageNo == 1) oldList.data = []
	// 合并新数据
	return oldList.data.concat(resList.data)
}

/**
 * 加载中提示
 * @param {Object} config 配置项
 */
export const showLoading = (config) => {
	uni.showLoading({
		title: '加载中...',
		mask: true,
		duration: 10000,
		...config
	})
}